<?php
/**
 * Переменные окружения
 * 
 * Класс для работы с глобальными переменными
 * @author Anton Zavidov
 * @package myLiveShop
 */

/**
 * Класс для работы с глобальными переменными
 *
 */
class Vars extends Base {
	/**
	 * банк переменных
	 *
	 * @var array
	 */
	private static $vars=array();
	/**
	 * Констуктор
	 *
	 * @param string $className имя подели
	 */
	public function __construct($className=null){
		
		parent::__construct($className?$className:__CLASS__);
	}
	/**
	 * универсальная функция чтения и записи переменных
	 *
	 * @param string $name имя переменной
	 * @param mixed $value значение
	 * @return mixed значение или true если операция была успешной
	 */
	public static function _($name,$value=null){
		if($value!==null){
			self::$vars[$name]=$value;
			return $value;
		}else{
			if(isset(self::$vars[$name]))return self::$vars[$name];
			new CoreExeption('Попытка обратится к несуществующей глобальной переменной '.$name,E_WARNING,__FILE__,__LINE__);
			return null;
		}
	}
	/**
	 * проверка на существование переменной
	 *
	 * @param string $name имя переменной
	 * @return boolean
	 */
	public static function check($name){
		return isset(self::$vars[$name]);
	}
	public function __set($name,$var){
		return $this->_($var,$var);
	}
	public function __get($name){
		return $this->_($name);
	}
	/**
	 * инкримент переменной
	 *
	 * @param string $name имя переменной
	 * @param int $add число на которое инкрементируется переменная
	 * @return int значение переменой
	 */
	public static function i($name,$add=1){
		if(!isset(self::$vars[$name])){
			new CoreExeption('Попытка инкрементировать несуществующую глобальную переменную '.$name,E_WARNING,__FILE__,__LINE__);
			return null;
		}
		if(!is_int(self::_($name))){
			new CoreExeption('Попытка инкрементировать не числовую глобальную переменную '.$name,E_NOTICE,__FILE__,__LINE__);
			return self::_($name);
		}
		return self::_($name,self::_($name)+$add);
	}
	/**
	 * декримент переменной
	 *
	 * @param string $name имя переменной
	 * @param int $add число на которое декрементируется переменная
	 * @return int значение переменной
	 */
	public static function d($name,$value=1){
		if(!isset(self::$vars[$name])){
			new CoreExeption('Попытка декрементировать несуществующую глобальную переменную '.$name,E_WARNING,__FILE__,__LINE__);
			return null;
		}
		if(!is_int(self::_($name))){
			new CoreExeption('Попытка декрементировать не числовую глобальную переменную '.$name,E_NOTICE,__FILE__,__LINE__);
			return self::_($name);
		}
		return self::_($name,self::_($name)-$value);
	}
	/**
	 * удаляем переменную
	 *
	 * @param string $name имя переменной
	 * @return boolean true если операция была успешной
	 */
	public static function delete($name){
		if(!isset(self::$vars[$name])){
			new CoreExeption('Попытка удалить несуществующую глобальную переменную '.$name,E_NOTICE,__FILE__,__LINE__);
			return false;
		}
		unset(self::$vars[$name]);
		return true;
	}
	/**
	 * Просмотр всех переменных
	 *
	 * @param boolean $vardump показать как var_dump
	 */
	public static function debug($vardump=false){
		pr(self::$vars,$vardump);
	}
	/**
	 * Прибавляет елементы к массиву
	 *
	 * @param string $name имя переменной
	 * @param array $value значение
	 * @return array новое значение
	 */
	public static function push($name,$value){
		toArray($value);
		if(!self::check($name)){
			self::_($name,$value);
			return $value;
		}
		foreach ($value as $item){
			self::$vars[$name][]=$item;
		}
		return self::$vars[$name];
	}
	public static function setVarsToView(&$smarty){
		$smarty->assign('VARS',self::$vars);
	}
}